// 处理请求拦截和响应拦截
// 引入
import axios from "axios";

// 判断一下用户是否登录
function getToken() { //获取token
  return localStorage.getItem('token')
}

// 创建axios实例
const httpInstance = axios.create({
  baseURL: "http://geek.itheima.net",
  timeout: 5000,
  withCredentials: false // 是 XMLHttpRequest 对象的一个属性，用于指示在进行跨域请求时是否携带跨域请求的凭据（比如 Cookies 和 HTTP 认证信息）。当该属性的值被设置为 true 时，代表允许跨域请求携带凭据，而当该属性值为 false 或者未设置时，则不允许
})

// 创建请求拦截和响应拦截
httpInstance.interceptors.request.use(
  // 成功
  config => {
    if (getToken()) {
      config.headers['token'] = getToken();
    }
    //返回
    return config
  },
  // 错误
  err => {
    return Promise.reject(err)
  }
)
// 响应拦截
httpInstance.interceptors.response.use(
  // 成功
  response => {
    const res = response.data
    if (res.code == '401') {
      window.location.href = '/login'
    }
    return Promise.resolve(res)
  },
  //错误
  error => {
    // 请求超时处理
    if (error.message.includes('timeout')) {
      alert('请求超时')
      return;
    }
    // 不同错误状态码处理
    const code = error.response.status;
    switch (code) {
      case 400:
        console.log('  ');
        break;
      case 401:
        console.log('未授权');
        break;
      case 403:
        console.log(' ');
        break;
      case 404:
        console.log('页面消失');
        break;
      case 500:
        console.log('服务器内部错误');
        break;
      case 502:
        console.log('网关错误');
        break;
    }
    return Promise.reject(error)
  }
)

// 导出
export { httpInstance }